جزوه · ایجاد فایل و فرمان‌های echo و touch ← بازگشت به فهرست
📘 فصل اول · جلسه پنجم ایجاد فایل و فرمان‌های echo و touch
📅 تاریخ: ۱۴۰۵/۰۵/۱۷ 👤 مدرس: محمد عابدینی

▍ مقدمه

در این جلسه از آموزش، با روش‌های مختلف ایجاد فایل در محیط خط‌فرمان لینوکس آشنا می‌شویم. دو فرمان بسیار مهم در این زمینه، echo و touch هستند که هر کدام کاربردهای خاص خود را دارند. همچنین با مفهوم تغییردهنده‌های خروجی (Redirection) آشنا می‌شویم که به ما امکان می‌دهند خروجی دستورات را در فایل‌ها ذخیره کنیم.

⚡ هدف این جلسه:

پس از مطالعه این جزوه، شما قادر خواهید بود:

  • با فرمان echo متن در ترمینال نمایش دهید
  • با استفاده از echo و تغییردهنده‌ها فایل بسازید
  • با فرمان touch فایل‌های خالی ایجاد کنید
  • تفاوت بین echo * و ls را درک کنید

▍ فرمان echo

فرمان echo یکی از ساده‌ترین و پرکاربردترین دستورات در لینوکس است که برای نمایش یک خط متن در خروجی استاندارد (ترمینال) استفاده می‌شود. این فرمان هم به صورت built-in (ساخته شده در خود شل) و هم به صورت یک برنامه مجزا در سیستم وجود دارد [citation:1][citation:6][citation:7].

• سینتکس (Syntax) پایه

$ echo [گزینه‌ها] [متن]
📝 مثال ساده:
$ echo "سلام دنیا!" سلام دنیا!

همان‌طور که می‌بینید، echo هر متنی که به آن بدهید را در ترمینال چاپ می‌کند [citation:7].

• گزینه‌های مهم echo

گزینه توضیح
-n بدون رفتن به خط جدید (عدم چاپ کاراکتر newline در انتها) [citation:1][citation:6]
-e فعال‌سازی تفسیر دنباله‌های فرار (escape sequences) مانند \n و \t [citation:1][citation:6]
-E غیرفعال‌سازی تفسیر دنباله‌های فرار (حالت پیش‌فرض) [citation:1][citation:6]
--help نمایش راهنما [citation:1][citation:6]
--version نمایش نسخه برنامه [citation:1][citation:6]

• دنباله‌های فرار (Escape Sequences) با گزینه -e

وقتی از گزینه -e استفاده می‌کنید، دنباله‌های زیر شناسایی می‌شوند [citation:1][citation:6][citation:13]:

دنباله توضیح
\\ نمایش یک بک‌اسلش
\a اعلان صوتی (Alert / Bell)
\b Backspace (یک کاراکتر به عقب)
\c متوقف کردن خروجی (چیزی بعد از این چاپ نمی‌شود)
\e کاراکتر Escape
\f Form Feed (صفحه جدید)
\n خط جدید (Newline)
\r Carriage Return (بازگشت به ابتدای خط)
\t تب افقی (Horizontal Tab)
\v تب عمودی (Vertical Tab)
\0NNN بایت با مقدار هشت‌عالی (Octal) NNN (۱ تا ۳ رقم)
\xHH بایت با مقدار شانزده‌عالی (Hexadecimal) HH (۱ تا ۲ رقم)
📝 مثال‌های کاربردی با دنباله‌های فرار:
$ echo -e "خط اول\nخط دوم" خط اول
خط دوم

با \n می‌توانید متن را به چند خط تقسیم کنید.

$ echo -e "اسم\t\tشماره" اسم شماره

با \t می‌توانید خروجی را به صورت جدولی مرتب کنید.

$ echo -n "این متن بدون خط جدید است" این متن بدون خط جدید است$

با -n، نشانگر (prompt) در ادامه همان خط ظاهر می‌شود.

⚠️ نکته مهم:

رفتار echo ممکن است در شل‌های مختلف (bash، zsh، dash) متفاوت باشد. برای نوشتن اسکریپت‌های قابل حمل (portable)، بهتر است از printf استفاده کنید که رفتار یکسانی در همه سیستم‌ها دارد [citation:1][citation:6].

▍ ایجاد فایل با echo و تغییردهنده‌های خروجی

یکی از مهم‌ترین کاربردهای echo، ایجاد فایل‌های متنی با استفاده از تغییردهنده‌های خروجی (Redirection Operators) است. در لینوکس، با استفاده از علامت‌های > و >> می‌توانیم خروجی یک دستور را به جای نمایش در ترمینال، در یک فایل ذخیره کنیم [citation:2][citation:5][citation:9].

• تغییردهنده > (بازنویسی / Overwrite)

علامت > خروجی را در یک فایل ذخیره می‌کند. اگر فایل وجود نداشته باشد، ساخته می‌شود. اگر وجود داشته باشد، محتوای قبلی آن کاملاً پاک و با خروجی جدید جایگزین می‌شود [citation:2][citation:5][citation:9].

📝 مثال:
$ echo "این محتوای فایل است" > myfile.txt

این دستور فایل myfile.txt را ایجاد کرده و متن داخل آن می‌نویسد.

$ cat myfile.txt این محتوای فایل است
📌 نکته:

در مثال شما echo yasin > abcde، فایل abcde ساخته شده و کلمه yasin در آن نوشته می‌شود.

• تغییردهنده >> (افزودن / Append)

علامت >> خروجی را به انتهای فایل اضافه می‌کند بدون اینکه محتوای قبلی را پاک کند [citation:2][citation:5][citation:9].

📝 مثال:
$ echo "خط اول" > file.txt # ایجاد فایل با خط اول
$ echo "خط دوم" >> file.txt # اضافه کردن خط دوم
$ cat file.txt خط اول
خط دوم

• تغییردهنده < (ورودی از فایل)

علامت < برعکس > عمل می‌کند و محتوای یک فایل را به عنوان ورودی به دستور می‌دهد [citation:9].

📝 مثال:
$ wc -l < file.txt 2

این دستور تعداد خطوط فایل file.txt را نشان می‌دهد.

▍ echo * و تفاوت آن با ls

یکی از نکات جالب در لینوکس این است که می‌توان از echo * برای لیست کردن فایل‌های دایرکتوری جاری استفاده کرد [citation:4][citation:12].

📝 مثال:
$ echo * Desktop Documents Downloads Music Pictures Videos
🔍 تفاوت echo * و ls:
  • echo * فقط نام فایل‌ها و دایرکتوری‌ها را در یک خط و با فاصله نمایش می‌دهد [citation:4][citation:12].
  • ls علاوه بر نام‌ها، اطلاعات بیشتری مانند مجوزها، مالک، اندازه و تاریخ را با گزینه‌های مناسب نمایش می‌دهد [citation:4][citation:12].
  • ls اگر دایرکتوری باشد، محتوای داخل آن را نیز نمایش می‌دهد، در حالی که echo * فقط نام دایرکتوری را نشان می‌دهد [citation:4].
  • echo * در مواقعی که ls در دسترس نباشد (مثل محیط‌های بازیابی سیستم) بسیار مفید است [citation:12].
⚠️ نکته:

استفاده از echo * به عنوان جایگزین ls کاملاً قابل اعتماد نیست، زیرا اگر نام فایل‌ها با کاراکتر - شروع شوند یا شامل دنباله‌های فرار باشند، ممکن است echo آن‌ها را به اشتباه به عنوان گزینه تفسیر کند [citation:8].

▍ فرمان touch

فرمان touch یکی از کاربردی‌ترین دستورات برای ایجاد فایل‌های خالی و همچنین به‌روزرسانی زمان دسترسی و تغییر فایل‌ها است [citation:3][citation:11].

• کاربرد اصلی

$ touch [گزینه‌ها] [نام فایل]
📝 مثال ساده:
$ touch newfile.txt

اگر فایل newfile.txt وجود نداشته باشد، یک فایل خالی ایجاد می‌کند. اگر وجود داشته باشد، زمان تغییر (Modification Time) آن را به زمان فعلی به‌روز می‌کند [citation:3][citation:11].

• گزینه‌های مهم touch

گزینه توضیح
-a فقط زمان دسترسی (Access Time) را تغییر می‌دهد [citation:3][citation:11]
-m فقط زمان تغییر (Modification Time) را تغییر می‌دهد [citation:3][citation:11]
-c, --no-create اگر فایل وجود نداشت، آن را ایجاد نمی‌کند [citation:3][citation:11]
-d, --date=STRING از تاریخ و زمان مشخص شده به جای زمان فعلی استفاده می‌کند [citation:3][citation:11]
-r, --reference=FILE زمان‌ها را از یک فایل مرجع کپی می‌کند [citation:3][citation:11]
-t [[CC]YY]MMDDhhmm[.ss] از زمان مشخص شده با فرمت عددی استفاده می‌کند [citation:3][citation:11]
-h, --no-dereference بر روی لینک‌های سمبلیک تأثیر می‌گذارد نه فایل مقصد [citation:3]
--help نمایش راهنما [citation:3]
--version نمایش نسخه برنامه [citation:3]

• مثال‌های پیشرفته touch

📝 ایجاد چند فایل با یک دستور:
$ touch file1.txt file2.txt file3.txt

سه فایل خالی به نام‌های file1.txt، file2.txt و file3.txt ایجاد می‌کند.

📝 تنظیم زمان مشخص:
$ touch -t 202401151030.00 myfile.txt

زمان فایل را به ۱۵ ژانویه ۲۰۲۴، ساعت ۱۰:۳۰:۰۰ تنظیم می‌کند [citation:11].

📝 کپی زمان از فایل دیگر:
$ touch -r reference.txt newfile.txt

زمان‌های newfile.txt را با زمان‌های reference.txt یکسان می‌کند [citation:11].

📝 استفاده از تاریخ خوانا:
$ touch -d "yesterday" myfile.txt # تنظیم زمان به دیروز
$ touch -d "2 weeks ago" myfile.txt # تنظیم زمان به دو هفته قبل

touch از عبارات زمانی قابل خواندن مانند "yesterday" و "2 weeks ago" پشتیبانی می‌کند [citation:11].

✅ کاربردهای عملی touch:
  • ایجاد فایل‌های خالی برای استفاده در اسکریپت‌ها یا به عنوان placeholder
  • به‌روزرسانی زمان فایل برای اینکه برنامه‌هایی مثل make فایل را تغییر یافته در نظر بگیرند [citation:11]
  • تست کردن مجوزها با ایجاد فایل در دایرکتوری‌های مختلف
  • ایجاد فایل‌های لاگ با زمان‌های مشخص برای تست

▍ مقایسه echo و touch برای ایجاد فایل

ویژگی echo > فایل touch فایل
ایجاد فایل بله، با محتوا بله، خالی
نوشتن محتوا بله خیر (فایل خالی است)
به‌روزرسانی زمان بله (به زمان فعلی) بله (به زمان فعلی یا دلخواه)
تنظیم زمان دلخواه خیر بله با -t یا -d
ایجاد چند فایل خیر (هر بار یک فایل) بله (با لیست کردن نام‌ها)

▍ جمع‌بندی

✅ تمرین پیشنهادی:

۱. با echo -e یک متن چندخطی با استفاده از \n ایجاد کنید.
۲. با echo و > یک فایل جدید بسازید و محتوای آن را با cat مشاهده کنید.
۳. با echo و >> چند خط به فایل اضافه کنید.
۴. با touch سه فایل خالی به صورت همزمان ایجاد کنید.
۵. با touch -t زمان یک فایل را به تاریخ مشخصی تنظیم کنید.
۶. تفاوت خروجی echo * و ls را در یک دایرکتوری پر از فایل بررسی کنید.